package day02;

public class day02晚自习 {
    public static void main(String[] args) {
        /**
         * 变量的练习:
         * 声明一个变量，一次声明多个变量
         * 声明变量直接初始化，先声明变量，而后再给变量初始化
         * 声明整型变量g，声明另一个整形变量h并赋值为g+10，输出变量h的值
         * 在g本身基础之上增10，输出变量g的值
         * 声明一些正确的和错误的变量名
         */
        //变量的声明
        int a;
        int b,c,d;
        //变量的初始化
        int e = 25;
        int f;
        f = 250;
        //变量的使用
        int g=5;
        int h=g+10;
        System.out.println(h);
        System.out.println("h");
        g=g+10;
        System.out.println(g);//看最后一个变量的值为输出结果
        //变量的命名
        int a1,a_5,a$,_3v,$_555;
        /**
         * 不能包含*号等特殊符号
         * 不能以数字开头
         * 严格区分大小写
         * 不能使用已有的关键字
         */
        /**
         * 命名：
         * 建议使用英文的见名知意
         * 建议使用小驼峰命名法
         */
        //数据的基本类型练习
        /**
         * 声明初始化两个以上整数变量，并且输出两个整数变量的除法过程
         * 声明两个很大的变量，然后相加，输出运算结果，测试运算溢出现象
         */
        /**
         * 1）int 整形，4个字节，-21亿多到21亿多-1
         * 2）long 长整形，8个字节，-2^63-2^63,很大很大很大
         * 3）double 浮点型，8个字节
         * 4）boolena 布尔型，1个字节 只有两个true和false
         * 5）char 字符型变量,2个字节，''里面只能有一个字符且必须有字符，65535
         */
        int aaa = 5;
        long bbb=25L;
        long bbbb=1000000000L*3*10;//运算若有可能溢出，建议在第1个数字后加
        double aaaaa=3.14159;
        float bbbbbb=3.14159F;
        double i=3.0,q=2.9;
        //System.out.println(c-d);//0.10000000000000000009,有可能发生舍入误差
        boolean w=true;
        boolean r=false;
        char c1='女';
        System.out.println(c1);//女
        char c2='f';
        System.out.println(c2);//f
        char c3='6';
        System.out.println(c3);//6
        char c4=65;//A
        char c5=48;//0
        char c6=97;//a
        int b1='A';//65
        int b2='a';//97
        int b3='0';//48
        /**
         * 类型间的转换
         * byte<short<int<long<float<double
         *           <char
         * 两种方式：自动/隐式类型转换：小类型到大类型
         *          强制类型转换：大类型到小类型
         * - 声明几个变量，演示自动类型转换和强制类型转换的语法
         * - 声明一个较大类型的长整型变量，演示强转可能会发生的溢出问题
         * - 声明一个较大精度的浮点型变量，演示强转可能会发生的丢失精度问题
         */
        int q1=5;
        long q2=q1;//int转long，小类型转大类型，自动转换
        int q3=(int)q2;//long转int，大类型转小类型，强制转换

        long w1= 5;//自动转换int转long
        double w2=5;//自动转换 int转double

        long f1=10000000000L;
        int f2=(int)f1;//大类型转小类型，long转int，强制
        System.out.println(f2);

        double h1=25.666;
        int h2=(int)h1;//double转int，大类型转小类型，强制转换
        System.out.println(h2);//小数转整形，有可能精度丢失

        /**
         * 两个规则
         * 整数直接量可以直接赋值给byte,short,char，但不能超出范围
         * byte,short,char型数据参与运算时，系统一律将其转换为int再运算
         * */
        byte y1 = 5;
        byte y2 = 6;
        byte y3 = (byte)(b1+b2);



        System.out.println(2+2); //4
        System.out.println(2+'2'); //52，2加上'2'的码50
        System.out.println('2'+'2'); //100，'2'的码50，加上'2'的码50
        System.out.println('2'); //2，没有运算过程，不转码
        int u1 = '我'; //看字符对应的码
        System.out.println(u1); //'我'的码
        char u2 = 65; //看码对应的字符
        System.out.println(u2); //A
    }
}
